package com.mindskip.xzs.utility;
//辅助处理 PageInfo 类型对象的转换操作,简化了 PageInfo 类型对象的转换操作，使得在前后端之间的数据传输和处理更加方便和灵活。
import com.github.pagehelper.PageInfo;

import java.util.function.Function;
import java.util.stream.Collectors;

/**
 * PageInfoHelper 类用于辅助处理 PageInfo 类型对象的转换操作
 */
public class PageInfoHelper {

    /**
     * 将 PageInfo<T> 类型对象转换为 PageInfo<J> 类型对象
     * @param source 源 PageInfo<T> 对象
     * @param mapper 转换函数，将 T 类型对象转换为 J 类型对象
     * @param <T> 源对象类型
     * @param <J> 目标对象类型
     * @return 转换后的 PageInfo<J> 对象
     */
    public static <T, J> PageInfo<J> copyMap(PageInfo<T> source, Function<? super T, ? extends J> mapper) {
        // 创建一个新的 PageInfo<J> 对象
        PageInfo<J> newPage = new PageInfo<>();

        // 复制 PageInfo<T> 对象的属性到新对象中
        newPage.setPageNum(source.getPageNum());
        newPage.setPageSize(source.getPageSize());
        newPage.setSize(source.getSize());
        newPage.setStartRow(source.getStartRow());
        newPage.setEndRow(source.getEndRow());
        newPage.setTotal(source.getTotal());
        newPage.setPages(source.getPages());

        // 使用转换函数将列表中的每个 T 类型对象转换为 J 类型对象，并放入新列表中
        newPage.setList(source.getList().stream().map(mapper).collect(Collectors.toList()));

        newPage.setPrePage(source.getPrePage());
        newPage.setNextPage(source.getNextPage());
        newPage.setIsFirstPage(source.isIsFirstPage());
        newPage.setIsLastPage(source.isIsLastPage());
        newPage.setHasPreviousPage(source.isHasPreviousPage());
        newPage.setHasNextPage(source.isHasNextPage());
        newPage.setNavigatePages(source.getNavigatePages());
        newPage.setNavigatepageNums(source.getNavigatepageNums());
        newPage.setNavigateFirstPage(source.getNavigateFirstPage());
        newPage.setNavigateLastPage(source.getNavigateLastPage());

        return newPage;
    }
}
